package br.com.tiespec.web.ManagedBean;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

import br.com.tiespec.ejb.EjbInterface.ConfigDescricaoInterface;
import br.com.tiespec.model.Modelo.ClientePortal;
import br.com.tiespec.model.Modelo.ConfigDescricaoEstendida;
import br.com.tiespec.model.Modelo.Usuario;
import br.com.tiespec.model.Util.RNException;
import br.com.tiespec.web.Util.MsgUtil;
import br.com.tiespec.web.Util.WebUtil;

@Named("configDescricaoBean")
@SessionScoped
public class ConfigDescricaoBean implements Serializable {

	private static final long serialVersionUID = -633435442639420004L;

	@EJB private ConfigDescricaoInterface ejb;
	
	private ConfigDescricaoEstendida configuracaoInstance;
	private ClientePortal clientePortalInstance;
	private Usuario usuarioLogado;
	
	private Integer nroUsuarios;
	private Integer nroClientes;
	private Integer nroProjetos;
	
	@PostConstruct
	public void init(){
		
	}
	
	public String configurar(){
		usuarioLogado = WebUtil.getUsuarioLogado();
		if (usuarioLogado == null){
			MsgUtil.msgWarn("Não existe usuário logado!");
			return null;
		}
		try {
			clientePortalInstance = ejb.selecionarClientePortal(usuarioLogado.getId());
			if (clientePortalInstance == null){
				MsgUtil.msgWarn("O usuário não têm permissão de Acesso!");
				return null;
			}
		} catch (RNException e) {
			MsgUtil.msgWarn("O usuário não têm permissão de Acesso!");
			e.printStackTrace();
		}
		try {
			configuracaoInstance = ejb.selecionarConfiguracao(clientePortalInstance.getId());
			if (configuracaoInstance == null){
				configuracaoInstance = new ConfigDescricaoEstendida();
				configuracaoInstance.setClientePortal(clientePortalInstance);
				ejb.salvarConfiguracao(configuracaoInstance);
			}
			nroUsuarios = ejb.countUsuarios(clientePortalInstance.getId());
			nroClientes = ejb.countClientes(clientePortalInstance.getId());
			nroProjetos = ejb.countProjetos(clientePortalInstance.getId());
			return "/views/configuracao/show.xhtml";
		} catch (RNException e) {
			MsgUtil.msgWarn("O usuário não têm permissão de Acesso!");
			e.printStackTrace();
		}
		return null;
	}
	
	public String goEdit(){
		return "/views/configuracao/edit.xhtml";
	}
	
	public String salvar(){
		try {
			ejb.salvarConfiguracao(configuracaoInstance);
			MsgUtil.msgSucesso("alt", clientePortalInstance.getNomeCurto());
			return "/views/configuracao/show.xhtml";
		} catch (RNException e) {
			MsgUtil.msgErro("alt", clientePortalInstance.getNomeCurto());
			return null;
		}
	}
	
	public String goDesistir(){
		return "/views/configuracao/show.xhtml";
	}
	
	public String goHome(){
		this.destroy();
		return "goHome";
	}
	
	@PreDestroy
	public void destroy(){
		configuracaoInstance = null;
		clientePortalInstance = null;
		usuarioLogado = null;
	}
	
	public ConfigDescricaoEstendida getConfiguracaoInstance() {
		return configuracaoInstance;
	}

	public void setConfiguracaoInstance(
			ConfigDescricaoEstendida configuracaoInstance) {
		this.configuracaoInstance = configuracaoInstance;
	}
	
	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}
	
	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}
	
	public ClientePortal getClientePortalInstance() {
		return clientePortalInstance;
	}
	
	public void setClientePortalInstance(ClientePortal clientePortalInstance) {
		this.clientePortalInstance = clientePortalInstance;
	}

	public Integer getNroUsuarios() {
		return nroUsuarios;
	}

	public void setNroUsuarios(Integer nroUsuarios) {
		this.nroUsuarios = nroUsuarios;
	}

	public Integer getNroClientes() {
		return nroClientes;
	}

	public void setNroClientes(Integer nroClientes) {
		this.nroClientes = nroClientes;
	}

	public Integer getNroProjetos() {
		return nroProjetos;
	}

	public void setNroProjetos(Integer nroProjetos) {
		this.nroProjetos = nroProjetos;
	}
}